/**
 * 
 */
package cn.com.easy.permission.dao;

import java.util.List;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

import cn.com.easy.permission.model.ResourceModel;

/**
 * 权限dao
 * 
 * @author nibili 2015年4月2日下午10:42:11
 * 
 */
public interface ResourceDao extends JpaRepository<ResourceModel, Long>, JpaSpecificationExecutor<ResourceModel> {

	/**
	 * 按path路径查找权限
	 * 
	 * @param url
	 * @return
	 * @auth nibili 2015年4月12日 下午10:47:47
	 */
	public ResourceModel findByUrl(String url);

	/**
	 * 按path,parentId查找权限
	 * 
	 * @param url
	 * @param parentId
	 * @return
	 * @auth nibili 2015年4月12日 下午11:23:24
	 */
	public ResourceModel findByUrlAndParentId(String url, Long parentId);

	/**
	 * 按parentId查找权限
	 * 
	 * @param parentId
	 * @return
	 * @auth nibili 2015年4月12日 下午11:23:24
	 */
	public List<ResourceModel> findByParentId(Long parentId);

	/**
	 * 按父节点，查找实体
	 * 
	 * @param url
	 * @return
	 * @auth nibili 2015年4月12日 下午10:47:47
	 */
	@Query("select count(r.id) from ResourceModel r where r.parentId=?1")
	public Integer countByParentId(Long parentId);

	/**
	 * 按用户id查找用户的权限资源
	 * 
	 * @param userId
	 * @return
	 * @author nibili 2015年12月11日
	 */
	@Query("select r from ResourceModel r where r.id in ( select rr.resourceId from RoleResourceMappingModel rr where rr.roleId  in (select urmapping.roleId from UserRolesMappingModel urmapping where urmapping.userId=?1 and urmapping.roleId in (select rm.id from RoleModel rm where rm.isEnable=1))) order by r.showIndex asc")
	public List<ResourceModel> findByUserId(Long userId);
}
